package com.zc.angelica.entity;

import com.zc.angelica.enums.ResponseEnum;

public class ResponseData<T> extends BaseResponse {

    /**
     * 数据
     */
    private T data;

    private ResponseData(ResponseEnum code) {
        super(code);
    }

    private ResponseData(ResponseEnum code, T data) {
        super(code);
        this.data = data;
    }

    /**
     * 对外开放基础响应体已供调用，可用于增、删、改接口操作
     */
    public static BaseResponse out(ResponseEnum code) {
        return new BaseResponse(code);
    }

    /**
     * 对外开放基础响应体已供调用，可用于增、删、改接口操作
     */
    public static BaseResponse success() {
        return new BaseResponse(ResponseEnum.SUCCESS);
    }

    public static <T> ResponseData<T> success( T data) {
        // TODO 优化分页返回
        return new ResponseData<>(ResponseEnum.SUCCESS, data);
    }


    /**
     * 对外开放基础响应体已供调用，可用于增、删、改接口操作
     */
    public static BaseResponse error() {
        return new BaseResponse(ResponseEnum.FAIL);
    }

    public static <T> ResponseData<T> error( T data) {
        return new ResponseData<>(ResponseEnum.FAIL, data);
    }


    /**
     * 对外开放基础响应体已供调用，可用于增、删、改接口操作
     */
    public static BaseResponse overtime() {
        return new BaseResponse(ResponseEnum.OVERTIME);
    }

    public static <T> ResponseData<T> overtime( T data) {
        return new ResponseData<>(ResponseEnum.OVERTIME, data);
    }

    /**
     * 对外开放数据响应体已供调用，可用于查询数据实用，引用了范型设计，支持各种数据类型
     */
    public static <T> ResponseData<T> out(ResponseEnum code, T data) {
        return new ResponseData<>(code, data);
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
